
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>搜索引擎的设计与优化 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>搜索引擎的设计与优化 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">一个完整的搜索引擎通常包含哪四个核心工作模块？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">一个完整的搜索引擎通常包括四个主要模块：1. 爬虫（Crawling）负责抓取内容；2. 索引（Indexing）负责建立倒排索引；3. 查询处理（Query Processing）负责解析用户请求并匹配索引；4. 排名算法（Ranking）负责对搜索结果进行排序。</div>
          </div>
          <div class="card-source">来源: 1.1 搜索引擎的基本流程</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">什么是倒排索引（Inverted Index），它为什么能极大提高搜索引擎的检索速度？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">倒排索引是一种将关键词和文档进行映射的数据结构。它通过存储每个词条及其出现位置，使得搜索引擎可以迅速定位到包含查询词的相关文档，从而极大提高检索速度。</div>
          </div>
          <div class="card-source">来源: 1.1 搜索引擎的基本流程</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">针对实时更新的数据场景，为什么增量索引比传统的全量索引更高效？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">因为增量索引只对新增或更新的数据进行索引，避免了每次都需要重新生成完整的索引，这种方式显著提高了索引的更新速度，更适用于实时数据场景。</div>
          </div>
          <div class="card-source">来源: 2.1 索引优化</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">文档中介绍了哪三种用于优化查询处理、提高响应速度的方法？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档介绍了三种查询优化方法：1. 缓存机制，通过缓存热点查询结果加速检索；2. 查询预处理，如去除停用词、同义词扩展等；3. 分布式查询，将请求分发到多个节点并行处理。</div>
          </div>
          <div class="card-source">来源: 2.2 查询优化</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">除了基于内容的排名模型（如TF-IDF），文档还提到了哪些其他的排名优化策略？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">除了基于内容的排名，文档还提到了两种策略：1. 基于用户行为的排名，通过分析用户的点击和浏览行为来调整排名；2. 采用机器学习与深度学习模型，通过训练模型来预测用户最可能点击的结果。</div>
          </div>
          <div class="card-source">来源: 2.3 排名优化</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">在分布式搜索引擎架构中，数据分片（Shard）和副本（Replica）各自的主要作用是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">数据分片（Shard）的主要作用是将索引数据划分为多个部分并存储在不同节点上，以充分利用集群的计算资源。副本（Replica）的主要作用是提高系统的高可用性，在节点宕机时保证系统可靠，同时也能提高查询的并发能力。</div>
          </div>
          <div class="card-source">来源: 3.1 数据分片与副本</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">一个典型的搜索引擎架构由哪些关键组件构成？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">一个典型的搜索引擎架构包括：数据采集模块（爬虫）、分布式存储系统（如HDFS、Elasticsearch）、索引和查询处理模块（使用倒排索引）、以及排名与排序模块。</div>
          </div>
          <div class="card-source">来源: 1.2 搜索引擎的架构</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">文档中提及了哪几种压缩倒排索引以减少存储空间的方法？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档中提及的常见压缩方法有字典压缩、熵编码和差分编码等。</div>
          </div>
          <div class="card-source">来源: 2.1 索引优化</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">搜索引擎系统如何应对不断变化的流量和数据量以确保平稳运行？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">通过两种重要策略：1. 动态扩展，在查询量增大时通过添加更多节点来实现横向扩展；2. 负载均衡，采用算法将查询请求均匀地分发到不同的节点上，避免单点性能瓶颈。</div>
          </div>
          <div class="card-source">来源: 3.2 动态扩展与负载均衡</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
